Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

Змішане програмування на мовах C та Асемблер

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2016
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування та операційні системи

Частина тексту файла

Міністерство освіти і науки Національний університет “Львівська політехніка” Кафедра ЕОМ / Звіт з лабораторної роботи № 2 з дисципліни: “Системне програмування” на тему: “Змішане програмування на мовах C та Асемблер” Мета лабораторної роботи Оволодіти навичками створення програм, частини яких написані різними мовами програмування. Засвоїти правила взаємодії між програними модулями різних мов програмування. Теоретичні відомості Труднощі опису зв’язку програм написаних мовою C і асемблерних програм полягає в тому, що різні версії мови C мають різні угоди з виклику функцій та передавання їм параметрів. Для більш точної інформації варто користатися посібником з наявної версії мови C. Індивідуальне завдання 1. Створити дві програми. Перша програма реалізує взаємовиклики С – ASM та здійснює обчислення, заданого виразу, згідно варіанту (Табл. 2.3). Програма повинна складатися з кількох модулів, передача параметрів між якими здійснюється через стек. Константа передається через спільну пам’ять. Основний модуль – створюється мовою С. Він повинен забезпечувати: • ввід даних з клавіатури; • виклик підпрограми обчислення виразу; • вивід на екран результату обчислення виразу. Модуль безпосередніх обчислень – здійснює всі обчислення виразу. Створюється мовою Assembler. 2. Друга програма реалізує взаємовиклики С – ASM – С та здійснює обчислення, заданого виразу, згідно варіанту. Програма повинна складатися з кількох модулів, передача параметрів між якими здійснюється через стек. Основний модуль – створюється мовою С. Він повинен забезпечувати: • ввід даних з клавіатури; • виклик підпрограми обчислення виразу; Модуль безпосередніх обчислень – здійснює всі обчислення і вивід на екран результату обчислення виразу викликом стандартної функції printf() . Створюється мовою Assembler. 29. X=K-B1*4+D2-F2/2 12A0C029  А, В, С, D, E, F - знакові цілі числа, довжиною в байтах, згідно з індексом, значення константи К подано у 16-му форматі. Код програми Перша програма (C – Asm) main.cpp #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <conio.h> extern "C" int calc(int, int, int); extern "C" const int K = 0x12A0C029; void main() { printf("X = %d - B * 4 + D - F / 2\n\nB = [-128; 127]\nD = [-32768; 32767]\nF = [-32768; 32767]\n\n", K); int B, D, F; do { printf("B = "); scanf("%d", &B); } while (B < -128 || B > 127); do { printf("D = "); scanf("%d", &D); } while (D < -32768 || D > 32767); do { printf("F = "); scanf("%d", &F); } while (F < -32768 || F > 32767); printf("\nC: X = %d\nAsm: X = %d\n", K - B * 4 + D - F / 2, calc(B, D, F)); _getch(); } calc.asm .686 .model flat, c .data extrn K : dword .code calc proc push ebp mov ebp, esp mov al, byte ptr [ebp+8] cbw cwde sal eax, 2 ; eax = B * 4 mov edx, K sub edx, eax ; edx = K - B * 4 mov ax, word ptr [ebp+12] cwde add eax, edx mov ebx, eax ; ebx = K - B * 4 + D mov ax, word ptr [ebp+16] cwde cdq mov ecx, 2 idiv ecx ; eax = F / 2 sub ebx, eax mov eax, ebx ; eax = K - B * 4 + D - F / 2 pop ebp ret calc endp end Друга програма (C – Asm – C) main.cpp #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <conio.h> extern "C" void calc(int, int, int); extern "C" const int K = 0x12A0C029; void main() { printf("X = %d - B * 4 + D - F / 2\n\nB = [-128; 127]\nD = [-32768; 32767]\nF = [-32768; 32767]\n\n", K); int B, D, F; do { printf("B = "); scanf("%d", &B); } while (B < -128 || B > 127); do { printf("D = "); scanf("%d", &D); } while (D < -32768 || D > 32767); do { printf("F = "); scanf("%d", &F); } while (F < -32768 || F > 32767); printf("\nC: X = %d\n", K - B * 4 + D - F / 2); calc(B, D, F); _getch(); } calc.asm .686 .model flat, c .data result db "Asm: X = %d", 13, 10, 0 extrn K : dword .code extrn printf : proc calc proc push ebp mov ebp, esp mov al, byte ptr [ebp+8] cbw cwde sal eax, 2 ; eax = B * 4 mov edx, K sub edx, eax ; edx = K - B * 4 ...
Антиботан аватар за замовчуванням

07.05.2017 14:05

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини